package com.fenghuajueli.libbasecoreui.baseswitch;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;

import androidx.annotation.IntRange;

import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.fenghuajueli.libbasecoreui.user.UserInfoUtils;
import com.fenghuajueli.libbasecoreui.utils.MmkvUtils;
import com.fenghuajueli.libbasecoreui.constants.KVConstants;
import com.fenghuajueli.module_route.UserModuleRoute;

public class PublicFunction {


    /**
     * 跳转去应用市场评论
     *
     * @param context
     */
    public static void goComment(Context context) {
        try {
            Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } catch (Exception e) {
            ToastUtils.showShort("您的手机未安装应用市场");
            e.printStackTrace();
        }
    }

    /**
     * 是否能跳转去使用功能
     *
     * @param position  1-5 功能点名称 如果只有一个功能点付费，默认传1 获取第一个的配置
     * @param needToVip 是否需要登录后跳转到vip开通页面  true表示如果不是vip才会跳转vip页面 如果是vip则也不会跳转
     *                  <p>
     *                  使用方式示例：
     *                  if(PublicFunction.checkCanNextByPosition(1,true)){
     *                  //跳转功能即可
     *                  }
     *                  <p>
     * @return true 表示可以跳转到功能界面
     */
    public static boolean checkCanUsedByPosition(@IntRange(from = 1, to = 5) int position, boolean needToVip) {
        if (SwitchKeyUtils.getPayStatus()) {
            if (checkIsCanFreeUseByFunPosition(position)) {
                return true;
            } else if (SwitchKeyUtils.getVipTemplateSwitch() != null
                    && SwitchKeyUtils.getVipTemplateSwitch().getPay_check_point() == 1) {
                return routeToCommon();
            } else {
                return routeToLogin(needToVip);
            }
        } else {
            return true;
        }
    }


    /**
     * 仅用于这个功能是必须付费的，没有免费试用次数控制的检测
     *
     * @param needToVip 是否登录后跳转到VIP页面  true表示如果不是vip才会跳转vip页面 如果是vip则也不会跳转
     *                  <p>
     *                  使用方式示例：
     *                  if(PublicFunction.checkCanUsed(true)){
     *                  //跳转功能即可
     *                  }
     *                  <p>
     * @return
     */
    public static boolean checkCanUsed(boolean needToVip) {
        if (SwitchKeyUtils.getPayStatus()) {
            return routeToLogin(needToVip);
        } else {
            return true;
        }
    }

    public static boolean routeToLogin(boolean needToVip) {
        if (UserInfoUtils.getInstance().isLogin()) {
            if (UserInfoUtils.getInstance().isVip()) {
                return true;
            } else {
                ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY).navigation();
            }
        } else {
            if (needToVip) {
                ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY)
                        .withString("type", "needToVip")
                        .navigation();
            } else {
                ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY).navigation();
            }
        }
        return false;
    }

    /**
     * @return 付费卡点开关为通用状态时跳转付费的同时功能仍能使用
     */
    public static boolean routeToCommon() {
        if (!UserInfoUtils.getInstance().isLogin() || !UserInfoUtils.getInstance().isVip()) {
            ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY).navigation();
        }
        return true;
    }

    /**
     * 是否能跳转去使用免费试用功能,请使用最新的根据功能点位置判断是否能使用此功能的方法
     * {@link PublicFunction#checkCanUsedByPosition(int, boolean)}
     *
     * @return true表示可以跳转到功能界面
     */
    @Deprecated
    public static boolean checkCanNext() {
        return checkCanUsedByPosition(1, true);
    }


    /**
     * 跳转去购买vip
     */
    public static void goBuyVip() {
        if (MmkvUtils.get("LOGIN_OUT", false)) {
            if (UserInfoUtils.getInstance().isLogin()) {
                ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY).navigation();
            } else {
                ARouter.getInstance().build(UserModuleRoute.USER_LOGIN).withString("type", "needToVip").navigation();
            }
        } else {
            ARouter.getInstance().build(UserModuleRoute.USER_OPEN_VIP_ACTIVITY).navigation();
        }
    }


    /**
     * 检查是否还能免费试用，过时，请使用最新的根据功能点判断当前功能是否能使用
     * {@link PublicFunction#checkIsCanFreeUseByFunPosition(int)}
     *
     * @return
     */
    @Deprecated
    public static boolean checkIsCanFreeUse() {
        return checkIsCanFreeUseByFunPosition(1);
    }


    /**
     * 根据传入的功能点的值  判断当前功能是否能继续免费试用
     *
     * @param funPosition 1-5取值 如果只有一个功能点 就默认传1
     * @return
     */
    public static boolean checkIsCanFreeUseByFunPosition(@IntRange(from = 1, to = 5) int funPosition) {
        if (funPosition < 1 || funPosition > 5) {
            return false;
        }
        String key = KVConstants.ALREADY_USE_COUNT + "_" + funPosition;
        int alreadyUseCount = MmkvUtils.mmkv.decodeInt(key, 0);
        int freeCount = SwitchKeyUtils.getFunFreeTime(funPosition);
        LogUtils.d("免费使用次数检测功能点：" + funPosition + "  配置的次数：" + freeCount + "已经使用的次数：" + alreadyUseCount);
        if (freeCount > 0) {
            if (freeCount - alreadyUseCount > 0) {
                MmkvUtils.mmkv.encode(key, ++alreadyUseCount);
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

}
